import api from "@/utils/api";

/**
 * 获取菜单数据
 * @param router
 * @param store
*/
const  initMenu = (router, store) => {
  api.getRequest('/permission/leftTree').then(res => {
    if(res.success){
      //得到后台返回的菜单数据
      let menus = res.data;
      if(menus.length){
        //过滤掉没有子集的一级菜单
        /*menus = menus.filter(item => {
          return item.children instanceof Array && item.children.length;
        })*/
        //菜单信息保存到vuex中
        let routerMenu = formatMenu(router, menus);
        //主页
        routerMenu.unshift({
          path: '/home',
          icon: 'fa fa-home',
          title: '主页',
          menuType: 1
        })
        store.commit('setMenuRoutes',routerMenu);
      }
    }
  })
}

/*const getData = () => {
  let arr = [
      {
        path: '/system',
        name: 'system',
        meta: {'title': '系统管理'},
        title: '系统管理',
        isRoute: 0,
        children: [
          {
            path: '/system/sysUserList',
            name: '用户管理',
            title: '用户管理',
            meta: {'title': '用户管理'},
            isRoute: 1,
            component: '/system/sysUserList',//路径区分大小写
          },
        ]
      }];
  return arr;
}*/

/**
 * 格式化菜单 将菜单转换为组件
 * @param router 路由组件
 * @param {Array} menus
 */
const formatMenu = (router, menus) => {
  return menus.filter(item => {
    //递归处理子集
    if (item.children instanceof Array && item.children.length) {
      formatMenu(router, item.children);
    }

    //设置路由meta
    item.meta = {'title': item.title,
      'requireAuth': item.requireAuth,
      'keepAlive': item.keepAlive};

    //isRoute为1代表是路由菜单
    //component代表数据库存储组件的相对路径（必填，且component路径与前端路径一致，区分大小写）
    //path代表前端路由对象的path（必填）
    if (item.isRoute === 1 && item.component) {
      item.component = loadView(item.component);
      //第一个参数：父级路由的name值
      router.addRoute('Frame', item);
    }
    return true;
  })
}

/**
 * 路由懒加载
 * @param view 组件路径
 * @returns {function(...[*]=)} 返回组件路由
 */
const loadView = (view) => {
  if(view.startsWith('/')){
    view = view.slice(1, view.length);
  }
  return (resolve) => import(`@/views/${view}`)
  //return (resolve) => require([`@/views/${view}`], resolve)
}

export { initMenu, formatMenu, loadView}
